home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 July & August / PCWorld_2006-07-08_cd.bin / komunikace / apache / apache_2[1].2.2-win32-x86-no_ssl.msi / Data1.cab / _631F8E4D37E47A42E4A9A3BA9F15C22D < prev    next >
Text File  |  2005-02-04  |  4KB  |  138 lines

  1. /* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
  2.  * applicable.
  3.  *
  4.  * Licensed under the Apache License, Version 2.0 (the "License");
  5.  * you may not use this file except in compliance with the License.
  6.  * You may obtain a copy of the License at
  7.  *
  8.  *     http://www.apache.org/licenses/LICENSE-2.0
  9.  *
  10.  * Unless required by applicable law or agreed to in writing, software
  11.  * distributed under the License is distributed on an "AS IS" BASIS,
  12.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13.  * See the License for the specific language governing permissions and
  14.  * limitations under the License.
  15.  */
  16.  
  17. #ifndef APR_QUEUE_H
  18. #define APR_QUEUE_H
  19.  
  20. #if APR_HAS_THREADS
  21. /**
  22.  * @file apr_queue.h
  23.  * @brief Thread Safe FIFO bounded queue
  24.  * @note Since most implementations of the queue are backed by a condition
  25.  * variable implementation, it isn't available on systems without threads.
  26.  * Although condition variables are some times available without threads.
  27.  */
  28.  
  29. #include "apu.h"
  30. #include "apr_errno.h"
  31. #include "apr_pools.h"
  32.  
  33. #ifdef __cplusplus
  34. extern "C" {
  35. #endif /* __cplusplus */
  36.  
  37. /**
  38.  * @defgroup APR_Util_FIFO Thread Safe FIFO bounded queue
  39.  * @ingroup APR_Util
  40.  * @{
  41.  */
  42.  
  43. /**
  44.  * opaque structure
  45.  */
  46. typedef struct apr_queue_t apr_queue_t;
  47.  
  48. /** 
  49.  * create a FIFO queue
  50.  * @param queue The new queue
  51.  * @param queue_capacity maximum size of the queue
  52.  * @param a pool to allocate queue from
  53.  */
  54. APU_DECLARE(apr_status_t) apr_queue_create(apr_queue_t **queue, 
  55.                                            unsigned int queue_capacity, 
  56.                                            apr_pool_t *a);
  57.  
  58. /**
  59.  * push/add a object to the queue, blocking if the queue is already full
  60.  *
  61.  * @param queue the queue
  62.  * @param data the data
  63.  * @returns APR_EINTR the blocking was interrupted (try again)
  64.  * @returns APR_EOF the queue has been terminated
  65.  * @returns APR_SUCCESS on a successfull push
  66.  */
  67. APU_DECLARE(apr_status_t) apr_queue_push(apr_queue_t *queue, void *data);
  68.  
  69. /**
  70.  * pop/get an object from the queue, blocking if the queue is already empty
  71.  *
  72.  * @param queue the queue
  73.  * @param data the data
  74.  * @returns APR_EINTR the blocking was interrupted (try again)
  75.  * @returns APR_EOF if the queue has been terminated
  76.  * @returns APR_SUCCESS on a successfull pop
  77.  */
  78. APU_DECLARE(apr_status_t) apr_queue_pop(apr_queue_t *queue, void **data);
  79.  
  80. /**
  81.  * push/add a object to the queue, returning immediatly if the queue is full
  82.  *
  83.  * @param queue the queue
  84.  * @param data the data
  85.  * @returns APR_EINTR the blocking operation was interrupted (try again)
  86.  * @returns APR_EAGAIN the queue is full
  87.  * @returns APR_EOF the queue has been terminated
  88.  * @returns APR_SUCCESS on a successfull push
  89.  */
  90. APU_DECLARE(apr_status_t) apr_queue_trypush(apr_queue_t *queue, void *data);
  91.  
  92. /**
  93.  * pop/get an object to the queue, returning immediatly if the queue is empty
  94.  *
  95.  * @param queue the queue
  96.  * @param data the data
  97.  * @returns APR_EINTR the blocking operation was interrupted (try again)
  98.  * @returns APR_EAGAIN the queue is empty
  99.  * @returns APR_EOF the queue has been terminated
  100.  * @returns APR_SUCCESS on a successfull push
  101.  */
  102. APU_DECLARE(apr_status_t) apr_queue_trypop(apr_queue_t *queue, void **data);
  103.  
  104. /**
  105.  * returns the size of the queue.
  106.  *
  107.  * @warning this is not threadsafe, and is intended for reporting/monitoring
  108.  * of the queue.
  109.  * @param queue the queue
  110.  * @returns the size of the queue
  111.  */
  112. APU_DECLARE(unsigned int) apr_queue_size(apr_queue_t *queue);
  113.  
  114. /**
  115.  * interrupt all the threads blocking on this queue.
  116.  *
  117.  * @param queue the queue
  118.  */
  119. APU_DECLARE(apr_status_t) apr_queue_interrupt_all(apr_queue_t *queue);
  120.  
  121. /**
  122.  * terminate all queue, sendinging a interupt to all the
  123.  * blocking threads
  124.  *
  125.  * @param queue the queue
  126.  */
  127. APU_DECLARE(apr_status_t) apr_queue_term(apr_queue_t *queue);
  128.  
  129. #ifdef __cplusplus
  130. }
  131. #endif
  132.  
  133. /** @} */
  134.  
  135. #endif /* APR_HAS_THREADS */
  136.  
  137. #endif /* APRQUEUE_H */
  138.